
//16.最接近的三数之和
class Solution {
public:
    int threeSumClosest(vector<int>& nums, int target) {
        //与三数之和类似，还是枚举每一个位置，用同向双指针进行查找最接近的位置
        int n=nums.size();
        sort(nums.begin(),nums.end());
        long long ret=INT_MAX;
        for(int i=0;i<n-2;i++)
        {
            //进行同向双指针让和靠近target
            int left=i+1,right=n-1;
            while(left<right)
            {
                int differ=nums[i]+nums[left]+nums[right];   //求此时的三数之和
                if(abs(differ-target)<abs(ret-target)) ret=differ;   //判断时候需要进行更新答案

                if(nums[i]+nums[left]+nums[right]>target) right--;   //此时三数>target，让right--使其靠近target
                else if(nums[i]+nums[left]+nums[right]<target) left++;      //此时三数<target，让left++使其靠近target
                else return target;   //相等就是最接近的位置，直接进行返回
            }
        }
        return ret;
    }
};